[Mobile Hacking 3] Broadcast-Receiver 취약점

[Mobile Hacking 3] Broadcast-Receiver 취약점

Lecture
Security
태그
mobile hacking
security
public
완성
Y
생성일
Mar 18, 2024 05:34 AM
LectureName
Mobile Hacking (Android- checklist)

1. 브로드캐스트 리시버란?


안드로이드 시스템의 중요한 요소 중 하나로, 안드로이드 디바이스에서 이벤트가 발생하면 브로드캐스트 신호를 보내게 되는데, 이 신호를 받아 처리하는 역할을 수행한다. 신호를 받을 경우 어플리케이션에서 정의해 놓은 작업을 수행합니다.
 
여기서 말하는 이벤트는 다음과 같습니다.
  • 문자 메세지 송, 수신
  • 배터리 상태
  • 다른 어플에서 발생하는 이벤트
 
 
 

2. 취약한 브로드캐스트리시버


개요
APK파일의 Manifests에서 해당 브로드캐스트 리시버를 설정할 수 있습니다.
여기서 주로 봐야할 것은 두가지인데요
  • 클래스 이름
  • exported 여부
notion image
 
exported=true 로 되어있는 경우 다른 어플리케이션으로부터 intent를 받을 수 있습니다.
exported=false 로 되어있는 경우 같은 uid를 가진 어플리케이션으로부터만 intent를 받을 수 있습니다.
 
취약점
exported=true 로 되어있는 경우. 다른 어플리케이션 혹은 adb로 브로드캐스트를 보낼 수 있고, 이 과정에서 취약점이 발생할 수 있습니다.
 
예시 코드를 보겠습니다. (인시큐어뱅크)
notion image
 
해당 코드를 보면, 브로드캐스트 이벤트가 생기면 해당 이벤트에서 phonenumbernewpass를 인자로 받아 비밀번호를 바꾸는 것 같은 요청을 합니다. (사실 뭔가 억지 코드 같기도)
 
여기서 중요하게 봐야 할 것은 비밀번호가 업데이트 되면서 이전의 비밀번호를 노출한다는 점입니다.
notion image
 
 
 

3. Exploit


로그인
기본적으로 해당 코드는 어플리케이션에 저장되어 있는 값을 기반으로 decrypt를 진행합니다. 따라서 해당 데이터가 저장되려면 인시큐어뱅크 어플리케이션에 로그인을 성공해야만 합니다.
notion image
 
브로드캐스트 테스트
adb에서 브로드캐스트를 생성하는 것은 다음과 같습니다.
adb shell am broadcast -a <브로드캐스트이름> -n <테스트할 클래스 이름> --es <인자>
 
am을 이용하여 브로드캐스트를 생성하고, 인시큐어뱅크 앱의 MyBroadCastReceiver로 브로드캐스팅 합니다.
notion image
 
로그를 보면 phonenumber is null 로그를 볼 수 있습니다.
notion image
 
그렇다면 아무 전화번호와 바꿀 패스워드를 인자로 줘보겠습니다.
notion image
 
decrypt된 비밀번호가 노출됩니다.
notion image
 
drozer을 이용한 테스트
# scan run app.package.attacksurface <패키지 이름> # 브로드캐스트 리시버 확인 run.broadcast.info -a com.android.insecurebankv2 # 테스팅 run app.broadcast.send --component <패키지 이름> <패키지이름>.<리시버 이름> --extra <타입> <변수명> <데이터> run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 5555
 
 

4. defense


AndroidManifest.xml 내 reciver컴포넌트의 값을 false로 변경
exported="false"